package com.lipaluma.field.mapper.builder;

import java.util.List;

import com.lipaluma.field.adaptor.Adaptor;
import com.lipaluma.field.adaptor.builder.AdaptorBuilder;
import com.lipaluma.field.adaptor.builder.AdaptorOnEachValueBuilder;
import com.lipaluma.field.mapper.FieldMapper;
import com.lipaluma.field.merge.FieldMergedAlgorithm;
import com.lipaluma.field.validator.Validator;
import com.lipaluma.field.validator.builder.ValidatorBuilder;
import com.lipaluma.field.validator.builder.ValidatorOnEachValueBuilder;

public interface FieldMapperAfterRegisterBuilder extends AddNewFieldMapperBuilder {
	public FieldMapperAfterRegisterBuilder asId();
	public FieldMapperAfterRegisterBuilder mergeWith(FieldMergedAlgorithm algorithm, String... params);
	public FieldMapperAfterRegisterBuilder mergeWith(FieldMergedAlgorithm algorithm);

	public ValidatorBuilder validate();
	public ValidatorOnEachValueBuilder validateOnEachValue();
	public AdaptorBuilder adapt();
	public AdaptorOnEachValueBuilder adaptOnEachValue();
	
	public FieldMapperAfterRegisterBuilder validate(Validator... validators);
	public FieldMapperAfterRegisterBuilder validateOnEachValue(Validator... validators);
	public FieldMapperAfterRegisterBuilder adapt(Adaptor... adaptors);
	public FieldMapperAfterRegisterBuilder adaptOnEachValue(Adaptor... adaptors);

	List<FieldMapper> build();
}
